package DBLayer;
import java.sql.*;

public class DBConnection {
	private static final String driver = "jdbc:sqlserver://Balder.ucn.dk";
	private static final String databaseName =";databaseName=DM76_1";
	private static String userName = "; user=DM76_1";
	private static String password = ";password=MaaGodt";
	
	private DatabaseMetaData dma;
	private static Connection con;
	private static DBConnection instance = null;
	
	//this method tries to connect to the database
	private DBConnection()
	{
		String url = driver + databaseName + userName + password;
		
		try{
			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
			System.out.println("Load of class ok");
		}
		catch(Exception e){
			System.out.println("Can not find the driver");
			System.out.println(e.getMessage());
		}
		try{
			con = DriverManager.getConnection(url);
			con.setAutoCommit(true);
			dma = con.getMetaData();
			System.out.println("Connection to " + dma.getURL());
			System.out.println("Driver " + dma.getDriverName());
			System.out.println("Database product name " + dma.getDatabaseProductName());
		}
		catch(Exception e){
			System.out.println("Problems with the connection to the database");
            System.out.println(e.getMessage());
            System.out.println(url);
		}
	}
	// this method closes the connection
	public static void closeConnection()
    {
       	try{
            con.close();
            System.out.println("The connection is closed");
        }
         catch (Exception e){
            System.out.println("Error trying to close the database " +  e.getMessage());
         }
    }
	// this method returns the connection
	public  Connection getDBcon()
    {
       return con;
    }
	// this method make sure that only one instance of this class can be made
	public static DBConnection getInstance()
    {
        if (instance == null)
        {
          instance = new DBConnection();
        }
        return instance;
    }
    
	// starts transaction
	public static void startTransaction()
    { try{
        con.setAutoCommit(false);
        }
      catch(Exception e){
        System.out.println("fejl start transaction");
        System.out.println(e.getMessage());
      }
    }
    // commits transaction
    public static void commitTransaction()
    { try{
        con.setAutoCommit(true);
        }
      catch(Exception e){
        System.out.println("fejl commit transaction");
        System.out.println(e.getMessage());
      }
    }
    // rolls back transaction
    public static void rollbackTransaction()
    { try{
        con.rollback();
        con.setAutoCommit(true);
        }
      catch(Exception e){
        System.out.println("fejl rollback transaction");
        System.out.println(e.getMessage());
      }
    }

}
